<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.Cmm.CallConv</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-2"></span><span>  </span><span class="annot"><a href="GHC.Cmm.CallConv.html#ParamLocation"><span class="hs-identifier">ParamLocation</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-3"></span><span>  </span><span class="annot"><a href="GHC.Cmm.CallConv.html#assignArgumentsPos"><span class="hs-identifier">assignArgumentsPos</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-4"></span><span>  </span><span class="annot"><a href="GHC.Cmm.CallConv.html#assignStack"><span class="hs-identifier">assignStack</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-5"></span><span>  </span><span class="annot"><a href="GHC.Cmm.CallConv.html#realArgRegsCover"><span class="hs-identifier">realArgRegsCover</span></a></span><span>
</span><span id="line-6"></span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-7"></span><span>
</span><span id="line-8"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-9"></span><span>
</span><span id="line-10"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html"><span class="hs-identifier">GHC.Cmm.Expr</span></a></span><span>
</span><span id="line-11"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html"><span class="hs-identifier">GHC.Runtime.Heap.Layout</span></a></span><span>
</span><span id="line-12"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.html"><span class="hs-identifier">GHC.Cmm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier">Convention</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-13"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Ppr.html"><span class="hs-identifier">GHC.Cmm.Ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- For Outputable instances</span><span>
</span><span id="line-14"></span><span>
</span><span id="line-15"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html"><span class="hs-identifier">GHC.Driver.Session</span></a></span><span>
</span><span id="line-16"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#"><span class="hs-identifier">GHC.Platform</span></a></span><span>
</span><span id="line-17"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-18"></span><span>
</span><span id="line-19"></span><span class="hs-comment">-- Calculate the 'GlobalReg' or stack locations for function call</span><span>
</span><span id="line-20"></span><span class="hs-comment">-- parameters as used by the Cmm calling convention.</span><span>
</span><span id="line-21"></span><span>
</span><span id="line-22"></span><span class="hs-keyword">data</span><span> </span><span id="ParamLocation"><span class="annot"><a href="GHC.Cmm.CallConv.html#ParamLocation"><span class="hs-identifier hs-var">ParamLocation</span></a></span></span><span>
</span><span id="line-23"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="RegisterParam"><span class="annot"><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span>
</span><span id="line-24"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="StackParam"><span class="annot"><a href="GHC.Cmm.CallConv.html#StackParam"><span class="hs-identifier hs-var">StackParam</span></a></span></span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span>
</span><span id="line-25"></span><span>
</span><span id="line-26"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621681049404"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#ParamLocation"><span class="hs-identifier hs-type">ParamLocation</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-27"></span><span>  </span><span id="local-6989586621681049398"><span class="annot"><span class="annottext">ppr :: ParamLocation -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-type">RegisterParam</span></a></span><span> </span><span id="local-6989586621681049396"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049396"><span class="hs-identifier hs-var">g</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">GlobalReg -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049396"><span class="hs-identifier hs-var">g</span></a></span><span>
</span><span id="line-28"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.CallConv.html#StackParam"><span class="hs-identifier hs-type">StackParam</span></a></span><span> </span><span id="local-6989586621681049395"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049395"><span class="hs-identifier hs-var">p</span></a></span></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049395"><span class="hs-identifier hs-var">p</span></a></span><span>
</span><span id="line-29"></span><span>
</span><span id="line-30"></span><span class="hs-comment">-- |</span><span>
</span><span id="line-31"></span><span class="hs-comment">-- Given a list of arguments, and a function that tells their types,</span><span>
</span><span id="line-32"></span><span class="hs-comment">-- return a list showing where each argument is passed</span><span>
</span><span id="line-33"></span><span class="hs-comment">--</span><span>
</span><span id="line-34"></span><span id="local-6989586621681049445"><span class="annot"><a href="GHC.Cmm.CallConv.html#assignArgumentsPos"><span class="hs-identifier hs-type">assignArgumentsPos</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span>
</span><span id="line-35"></span><span>                   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span>           </span><span class="hs-comment">-- stack offset to start with</span><span>
</span><span id="line-36"></span><span>                   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span>
</span><span id="line-37"></span><span>                   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621681049445"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#CmmType"><span class="hs-identifier hs-type">CmmType</span></a></span><span class="hs-special">)</span><span>    </span><span class="hs-comment">-- how to get a type from an arg</span><span>
</span><span id="line-38"></span><span>                   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="#local-6989586621681049445"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">]</span><span>               </span><span class="hs-comment">-- args</span><span>
</span><span id="line-39"></span><span>                   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-40"></span><span>                        </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span>              </span><span class="hs-comment">-- bytes of stack args</span><span>
</span><span id="line-41"></span><span>                      </span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621681049445"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#ParamLocation"><span class="hs-identifier hs-type">ParamLocation</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- args and locations</span><span>
</span><span id="line-42"></span><span>                      </span><span class="hs-special">)</span></span><span>
</span><span id="line-43"></span><span>
</span><span id="line-44"></span><span id="assignArgumentsPos"><span class="annot"><span class="annottext">assignArgumentsPos :: forall a.
DynFlags
-&gt; Int
-&gt; Convention
-&gt; (a -&gt; CmmType)
-&gt; [a]
-&gt; (Int, [(a, ParamLocation)])
</span><a href="GHC.Cmm.CallConv.html#assignArgumentsPos"><span class="hs-identifier hs-var hs-var">assignArgumentsPos</span></a></span></span><span> </span><span id="local-6989586621681049394"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049393"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049393"><span class="hs-identifier hs-var">off</span></a></span></span><span> </span><span id="local-6989586621681049392"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049392"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049391"><span class="annot"><span class="annottext">a -&gt; CmmType
</span><a href="#local-6989586621681049391"><span class="hs-identifier hs-var">arg_ty</span></a></span></span><span> </span><span id="local-6989586621681049390"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049390"><span class="hs-identifier hs-var">reps</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049389"><span class="hs-identifier hs-var">stk_off</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049388"><span class="hs-identifier hs-var">assignments</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-45"></span><span>    </span><span class="hs-keyword">where</span><span>
</span><span id="line-46"></span><span>      </span><span id="local-6989586621681049387"><span class="annot"><span class="annottext">platform :: Platform
</span><a href="#local-6989586621681049387"><span class="hs-identifier hs-var hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; Platform
</span><a href="GHC.Driver.Session.html#targetPlatform"><span class="hs-identifier hs-var hs-var">targetPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-47"></span><span>      </span><span id="local-6989586621681049385"><span class="annot"><span class="annottext">regs :: AvailRegs
</span><a href="#local-6989586621681049385"><span class="hs-identifier hs-var hs-var">regs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049390"><span class="hs-identifier hs-var">reps</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049392"><span class="hs-identifier hs-var">conv</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-48"></span><span>               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[a]
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span>   </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#NativeNodeCall"><span class="hs-identifier hs-var">NativeNodeCall</span></a></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#getRegsWithNode"><span class="hs-identifier hs-var">getRegsWithNode</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-49"></span><span>               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[a]
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span>   </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#NativeDirectCall"><span class="hs-identifier hs-var">NativeDirectCall</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#getRegsWithoutNode"><span class="hs-identifier hs-var">getRegsWithoutNode</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-50"></span><span>               </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="annot"><span class="annottext">a
</span><span class="hs-identifier">_</span></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#NativeReturn"><span class="hs-identifier hs-var">NativeReturn</span></a></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#allRegs"><span class="hs-identifier hs-var">allRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-51"></span><span>               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[a]
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span>   </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#NativeReturn"><span class="hs-identifier hs-var">NativeReturn</span></a></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#getRegsWithNode"><span class="hs-identifier hs-var">getRegsWithNode</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-52"></span><span>               </span><span class="hs-comment">-- GC calling convention *must* put values in registers</span><span>
</span><span id="line-53"></span><span>               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[a]
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span>   </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#GC"><span class="hs-identifier hs-var">GC</span></a></span><span class="hs-special">)</span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#allRegs"><span class="hs-identifier hs-var">allRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-54"></span><span>               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[a]
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span>   </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#Slow"><span class="hs-identifier hs-var">Slow</span></a></span><span class="hs-special">)</span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">AvailRegs
</span><a href="GHC.Cmm.CallConv.html#nodeOnly"><span class="hs-identifier hs-var">nodeOnly</span></a></span><span>
</span><span id="line-55"></span><span>      </span><span class="hs-comment">-- The calling conventions first assign arguments to registers,</span><span>
</span><span id="line-56"></span><span>      </span><span class="hs-comment">-- then switch to the stack when we first run out of registers</span><span>
</span><span id="line-57"></span><span>      </span><span class="hs-comment">-- (even if there are still available registers for args of a</span><span>
</span><span id="line-58"></span><span>      </span><span class="hs-comment">-- different type).  When returning an unboxed tuple, we also</span><span>
</span><span id="line-59"></span><span>      </span><span class="hs-comment">-- separate the stack arguments by pointerhood.</span><span>
</span><span id="line-60"></span><span>      </span><span class="hs-special">(</span><span id="local-6989586621681049375"><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049375"><span class="hs-identifier hs-var">reg_assts</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049374"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049374"><span class="hs-identifier hs-var">stk_args</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
-&gt; [a] -&gt; AvailRegs -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049373"><span class="hs-identifier hs-var">assign_regs</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049390"><span class="hs-identifier hs-var">reps</span></a></span><span> </span><span class="annot"><span class="annottext">AvailRegs
</span><a href="#local-6989586621681049385"><span class="hs-identifier hs-var">regs</span></a></span><span>
</span><span id="line-61"></span><span>      </span><span class="hs-special">(</span><span id="local-6989586621681049389"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049389"><span class="hs-identifier hs-var">stk_off</span></a></span></span><span class="hs-special">,</span><span>   </span><span id="local-6989586621681049372"><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049372"><span class="hs-identifier hs-var">stk_assts</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform
-&gt; Int -&gt; (a -&gt; CmmType) -&gt; [a] -&gt; (Int, [(a, ParamLocation)])
forall a.
Platform
-&gt; Int -&gt; (a -&gt; CmmType) -&gt; [a] -&gt; (Int, [(a, ParamLocation)])
</span><a href="GHC.Cmm.CallConv.html#assignStack"><span class="hs-identifier hs-var">assignStack</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049387"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049393"><span class="hs-identifier hs-var">off</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; CmmType
</span><a href="#local-6989586621681049391"><span class="hs-identifier hs-var">arg_ty</span></a></span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049374"><span class="hs-identifier hs-var">stk_args</span></a></span><span>
</span><span id="line-62"></span><span>      </span><span id="local-6989586621681049388"><span class="annot"><span class="annottext">assignments :: [(a, ParamLocation)]
</span><a href="#local-6989586621681049388"><span class="hs-identifier hs-var hs-var">assignments</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049375"><span class="hs-identifier hs-var">reg_assts</span></a></span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
-&gt; [(a, ParamLocation)] -&gt; [(a, ParamLocation)]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049372"><span class="hs-identifier hs-var">stk_assts</span></a></span><span>
</span><span id="line-63"></span><span>
</span><span id="line-64"></span><span>      </span><span id="local-6989586621681049373"><span class="annot"><span class="annottext">assign_regs :: [(a, ParamLocation)]
-&gt; [a] -&gt; AvailRegs -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049373"><span class="hs-identifier hs-var hs-var">assign_regs</span></a></span></span><span> </span><span id="local-6989586621681049371"><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049371"><span class="hs-identifier hs-var">assts</span></a></span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>     </span><span class="annot"><span class="annottext">AvailRegs
</span><span class="hs-identifier">_</span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049371"><span class="hs-identifier hs-var">assts</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-65"></span><span>      </span><span class="annot"><a href="#local-6989586621681049373"><span class="hs-identifier hs-var">assign_regs</span></a></span><span> </span><span id="local-6989586621681049370"><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049370"><span class="hs-identifier hs-var">assts</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049369"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049369"><span class="hs-identifier hs-var">r</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049368"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049368"><span class="hs-identifier hs-var">rs</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049367"><span class="annot"><span class="annottext">AvailRegs
</span><a href="#local-6989586621681049367"><span class="hs-identifier hs-var">regs</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isVecType"><span class="hs-identifier hs-var">isVecType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681049365"><span class="hs-identifier hs-var">ty</span></a></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049364"><span class="hs-identifier hs-var">vec</span></a></span><span>
</span><span id="line-66"></span><span>                                    </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isFloatType"><span class="hs-identifier hs-var">isFloatType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681049365"><span class="hs-identifier hs-var">ty</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049362"><span class="hs-identifier hs-var">float</span></a></span><span>
</span><span id="line-67"></span><span>                                    </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049361"><span class="hs-identifier hs-var">int</span></a></span><span>
</span><span id="line-68"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681049364"><span class="annot"><span class="annottext">vec :: ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049364"><span class="hs-identifier hs-var hs-var">vec</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049360"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">AvailRegs
</span><a href="#local-6989586621681049367"><span class="hs-identifier hs-var">regs</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-69"></span><span>                      </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W128"><span class="hs-identifier hs-var">W128</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049358"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049358"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049357"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049357"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049356"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049356"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049355"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049355"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049354"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049354"><span class="hs-identifier hs-var">s</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049353"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049353"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-70"></span><span>                          </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width -&gt; DynFlags -&gt; Bool
</span><a href="GHC.Cmm.CallConv.html#passVectorInReg"><span class="hs-identifier hs-var">passVectorInReg</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W128"><span class="hs-identifier hs-var">W128</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#XmmReg"><span class="hs-identifier hs-var">XmmReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049354"><span class="hs-identifier hs-var">s</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049358"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049357"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049356"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049355"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049353"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-71"></span><span>                      </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W256"><span class="hs-identifier hs-var">W256</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049348"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049348"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049347"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049347"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049346"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049346"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049345"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049345"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049344"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049344"><span class="hs-identifier hs-var">s</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049343"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049343"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-72"></span><span>                          </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width -&gt; DynFlags -&gt; Bool
</span><a href="GHC.Cmm.CallConv.html#passVectorInReg"><span class="hs-identifier hs-var">passVectorInReg</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W256"><span class="hs-identifier hs-var">W256</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#YmmReg"><span class="hs-identifier hs-var">YmmReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049344"><span class="hs-identifier hs-var">s</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049348"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049347"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049346"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049345"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049343"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-73"></span><span>                      </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W512"><span class="hs-identifier hs-var">W512</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049340"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049340"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049339"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049339"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049338"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049338"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049337"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049337"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049336"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049336"><span class="hs-identifier hs-var">s</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049335"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049335"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-74"></span><span>                          </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width -&gt; DynFlags -&gt; Bool
</span><a href="GHC.Cmm.CallConv.html#passVectorInReg"><span class="hs-identifier hs-var">passVectorInReg</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W512"><span class="hs-identifier hs-var">W512</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049394"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#ZmmReg"><span class="hs-identifier hs-var">ZmmReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049336"><span class="hs-identifier hs-var">s</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049340"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049339"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049338"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049337"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049335"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-75"></span><span>                      </span><span class="annot"><span class="annottext">(Width, AvailRegs)
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049370"><span class="hs-identifier hs-var">assts</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049369"><span class="hs-identifier hs-var">r</span></a></span><span class="annot"><span class="annottext">a -&gt; [a] -&gt; [a]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049368"><span class="hs-identifier hs-var">rs</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-76"></span><span>              </span><span id="local-6989586621681049362"><span class="annot"><span class="annottext">float :: ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049362"><span class="hs-identifier hs-var hs-var">float</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049360"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">AvailRegs
</span><a href="#local-6989586621681049367"><span class="hs-identifier hs-var">regs</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-77"></span><span>                        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049332"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049332"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049331"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049331"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049330"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049330"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049329"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049329"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049328"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049328"><span class="hs-identifier hs-var">s</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049327"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049327"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-78"></span><span>                            </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681049326"><span class="hs-identifier hs-var">passFloatInXmm</span></a></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#FloatReg"><span class="hs-identifier hs-var">FloatReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049328"><span class="hs-identifier hs-var">s</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049332"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049331"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049330"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049329"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049327"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-79"></span><span>                        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049324"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049324"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049323"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049323"><span class="hs-identifier hs-var">f</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049322"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049322"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049321"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049321"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049320"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049320"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049319"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049319"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-80"></span><span>                            </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681049326"><span class="hs-identifier hs-var">passFloatInXmm</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049323"><span class="hs-identifier hs-var">f</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049324"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049322"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049321"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049320"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049319"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-81"></span><span>                        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049316"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049316"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049315"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049315"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049314"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049314"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049313"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049313"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049312"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049312"><span class="hs-identifier hs-var">s</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049311"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049311"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-82"></span><span>                            </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681049326"><span class="hs-identifier hs-var">passFloatInXmm</span></a></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#DoubleReg"><span class="hs-identifier hs-var">DoubleReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049312"><span class="hs-identifier hs-var">s</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049316"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049315"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049314"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049313"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049311"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-83"></span><span>                        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049309"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049309"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049308"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049308"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049307"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049307"><span class="hs-identifier hs-var">d</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049306"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049306"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049305"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049305"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049304"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049304"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-84"></span><span>                            </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool
</span><span class="hs-identifier hs-var">not</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681049326"><span class="hs-identifier hs-var">passFloatInXmm</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049307"><span class="hs-identifier hs-var">d</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049309"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049308"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049306"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049305"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049304"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-85"></span><span>                        </span><span class="annot"><span class="annottext">(Width, AvailRegs)
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049370"><span class="hs-identifier hs-var">assts</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049369"><span class="hs-identifier hs-var">r</span></a></span><span class="annot"><span class="annottext">a -&gt; [a] -&gt; [a]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049368"><span class="hs-identifier hs-var">rs</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-86"></span><span>              </span><span id="local-6989586621681049361"><span class="annot"><span class="annottext">int :: ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049361"><span class="hs-identifier hs-var hs-var">int</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049360"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">AvailRegs
</span><a href="#local-6989586621681049367"><span class="hs-identifier hs-var">regs</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-87"></span><span>                      </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W128"><span class="hs-identifier hs-var">W128</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">AvailRegs
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; ([(a, ParamLocation)], [a])
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;W128 unsupported register type&quot;</span></span><span>
</span><span id="line-88"></span><span>                      </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049299"><span class="annot"><span class="annottext">VGcPtr -&gt; GlobalReg
</span><a href="#local-6989586621681049299"><span class="hs-identifier hs-var">v</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049298"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049298"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049297"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049297"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049296"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049296"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049295"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049295"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049294"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049294"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Int
</span><a href="GHC.Cmm.Type.html#widthInBits"><span class="hs-identifier hs-var">widthInBits</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049360"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;=</span></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Int
</span><a href="GHC.Cmm.Type.html#widthInBits"><span class="hs-identifier hs-var">widthInBits</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049387"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-89"></span><span>                          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">VGcPtr -&gt; GlobalReg
</span><a href="#local-6989586621681049299"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="annot"><span class="annottext">VGcPtr
</span><a href="#local-6989586621681049290"><span class="hs-identifier hs-var">gcp</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049298"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049297"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049296"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049295"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049294"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-90"></span><span>                      </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049289"><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049289"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049288"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049288"><span class="hs-identifier hs-var">fs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049287"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049287"><span class="hs-identifier hs-var">ds</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049286"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049286"><span class="hs-identifier hs-var">l</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049285"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049285"><span class="hs-identifier hs-var">ls</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049284"><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049284"><span class="hs-identifier hs-var">ss</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Int
</span><a href="GHC.Cmm.Type.html#widthInBits"><span class="hs-identifier hs-var">widthInBits</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049360"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&gt;</span></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Int
</span><a href="GHC.Cmm.Type.html#widthInBits"><span class="hs-identifier hs-var">widthInBits</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049387"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-91"></span><span>                          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-var">RegisterParam</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049286"><span class="hs-identifier hs-var">l</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg]
</span><a href="#local-6989586621681049289"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049288"><span class="hs-identifier hs-var">fs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049287"><span class="hs-identifier hs-var">ds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049285"><span class="hs-identifier hs-var">ls</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681049284"><span class="hs-identifier hs-var">ss</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-92"></span><span>                      </span><span class="annot"><span class="annottext">(Width, AvailRegs)
</span><span class="hs-identifier">_</span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049370"><span class="hs-identifier hs-var">assts</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049369"><span class="hs-identifier hs-var">r</span></a></span><span class="annot"><span class="annottext">a -&gt; [a] -&gt; [a]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049368"><span class="hs-identifier hs-var">rs</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-93"></span><span>              </span><span id="local-6989586621681049351"><span class="annot"><span class="annottext">k :: (ParamLocation, AvailRegs) -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049351"><span class="hs-identifier hs-var hs-var">k</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049282"><span class="annot"><span class="annottext">ParamLocation
</span><a href="#local-6989586621681049282"><span class="hs-identifier hs-var">asst</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049281"><span class="annot"><span class="annottext">AvailRegs
</span><a href="#local-6989586621681049281"><span class="hs-identifier hs-var">regs'</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
-&gt; [a] -&gt; AvailRegs -&gt; ([(a, ParamLocation)], [a])
</span><a href="#local-6989586621681049373"><span class="hs-identifier hs-var">assign_regs</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049369"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">ParamLocation
</span><a href="#local-6989586621681049282"><span class="hs-identifier hs-var">asst</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(a, ParamLocation) -&gt; [(a, ParamLocation)] -&gt; [(a, ParamLocation)]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049370"><span class="hs-identifier hs-var">assts</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049368"><span class="hs-identifier hs-var">rs</span></a></span><span> </span><span class="annot"><span class="annottext">AvailRegs
</span><a href="#local-6989586621681049281"><span class="hs-identifier hs-var">regs'</span></a></span><span>
</span><span id="line-94"></span><span>              </span><span id="local-6989586621681049365"><span class="annot"><span class="annottext">ty :: CmmType
</span><a href="#local-6989586621681049365"><span class="hs-identifier hs-var hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">a -&gt; CmmType
</span><a href="#local-6989586621681049391"><span class="hs-identifier hs-var">arg_ty</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049369"><span class="hs-identifier hs-var">r</span></a></span><span>
</span><span id="line-95"></span><span>              </span><span id="local-6989586621681049360"><span class="annot"><span class="annottext">w :: Width
</span><a href="#local-6989586621681049360"><span class="hs-identifier hs-var hs-var">w</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Width
</span><a href="GHC.Cmm.Type.html#typeWidth"><span class="hs-identifier hs-var">typeWidth</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681049365"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-96"></span><span>              </span><span id="local-6989586621681049290"><span class="annot"><span class="annottext">gcp :: VGcPtr
</span><a href="#local-6989586621681049290"><span class="hs-identifier hs-var hs-var">gcp</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isGcPtrType"><span class="hs-identifier hs-var">isGcPtrType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681049365"><span class="hs-identifier hs-var">ty</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">VGcPtr
</span><a href="GHC.Cmm.Expr.html#VGcPtr"><span class="hs-identifier hs-var">VGcPtr</span></a></span><span>
</span><span id="line-97"></span><span>                  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">VGcPtr
</span><a href="GHC.Cmm.Expr.html#VNonGcPtr"><span class="hs-identifier hs-var">VNonGcPtr</span></a></span><span>
</span><span id="line-98"></span><span>              </span><span id="local-6989586621681049326"><span class="annot"><span class="annottext">passFloatInXmm :: Bool
</span><a href="#local-6989586621681049326"><span class="hs-identifier hs-var hs-var">passFloatInXmm</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Bool
</span><a href="GHC.Cmm.CallConv.html#passFloatArgsInXmm"><span class="hs-identifier hs-var">passFloatArgsInXmm</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049387"><span class="hs-identifier hs-var">platform</span></a></span><span>
</span><span id="line-99"></span><span>
</span><span id="line-100"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#passFloatArgsInXmm"><span class="hs-identifier hs-type">passFloatArgsInXmm</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-101"></span><span id="passFloatArgsInXmm"><span class="annot"><span class="annottext">passFloatArgsInXmm :: Platform -&gt; Bool
</span><a href="GHC.Cmm.CallConv.html#passFloatArgsInXmm"><span class="hs-identifier hs-var hs-var">passFloatArgsInXmm</span></a></span></span><span> </span><span id="local-6989586621681049275"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049275"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformArch"><span class="hs-identifier hs-var">platformArch</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049275"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-102"></span><span>                              </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86_64"><span class="hs-identifier hs-var">ArchX86_64</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-103"></span><span>                              </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86"><span class="hs-identifier hs-var">ArchX86</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-104"></span><span>                              </span><span class="annot"><span class="annottext">Arch
</span><span class="hs-identifier">_</span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-105"></span><span>
</span><span id="line-106"></span><span class="hs-comment">-- We used to spill vector registers to the stack since the LLVM backend didn't</span><span>
</span><span id="line-107"></span><span class="hs-comment">-- support vector registers in its calling convention. However, this has now</span><span>
</span><span id="line-108"></span><span class="hs-comment">-- been fixed. This function remains only as a convenient way to re-enable</span><span>
</span><span id="line-109"></span><span class="hs-comment">-- spilling when debugging code generation.</span><span>
</span><span id="line-110"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#passVectorInReg"><span class="hs-identifier hs-type">passVectorInReg</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-111"></span><span id="passVectorInReg"><span class="annot"><span class="annottext">passVectorInReg :: Width -&gt; DynFlags -&gt; Bool
</span><a href="GHC.Cmm.CallConv.html#passVectorInReg"><span class="hs-identifier hs-var hs-var">passVectorInReg</span></a></span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-112"></span><span>
</span><span id="line-113"></span><span id="local-6989586621681049439"><span class="annot"><a href="GHC.Cmm.CallConv.html#assignStack"><span class="hs-identifier hs-type">assignStack</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621681049439"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#CmmType"><span class="hs-identifier hs-type">CmmType</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="#local-6989586621681049439"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-114"></span><span>            </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-115"></span><span>                 </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span>              </span><span class="hs-comment">-- bytes of stack args</span><span>
</span><span id="line-116"></span><span>               </span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621681049439"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#ParamLocation"><span class="hs-identifier hs-type">ParamLocation</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- args and locations</span><span>
</span><span id="line-117"></span><span>               </span><span class="hs-special">)</span></span><span>
</span><span id="line-118"></span><span id="assignStack"><span class="annot"><span class="annottext">assignStack :: forall a.
Platform
-&gt; Int -&gt; (a -&gt; CmmType) -&gt; [a] -&gt; (Int, [(a, ParamLocation)])
</span><a href="GHC.Cmm.CallConv.html#assignStack"><span class="hs-identifier hs-var hs-var">assignStack</span></a></span></span><span> </span><span id="local-6989586621681049271"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049271"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681049270"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049270"><span class="hs-identifier hs-var">offset</span></a></span></span><span> </span><span id="local-6989586621681049269"><span class="annot"><span class="annottext">a -&gt; CmmType
</span><a href="#local-6989586621681049269"><span class="hs-identifier hs-var">arg_ty</span></a></span></span><span> </span><span id="local-6989586621681049268"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049268"><span class="hs-identifier hs-var">args</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; [(a, ParamLocation)] -&gt; [a] -&gt; (Int, [(a, ParamLocation)])
</span><a href="#local-6989586621681049267"><span class="hs-identifier hs-var">assign_stk</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049270"><span class="hs-identifier hs-var">offset</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[a] -&gt; [a]
forall a. [a] -&gt; [a]
</span><a href="../../base/src/GHC.List.html#reverse"><span class="hs-identifier hs-var">reverse</span></a></span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049268"><span class="hs-identifier hs-var">args</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-119"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-120"></span><span>      </span><span id="local-6989586621681049267"><span class="annot"><span class="annottext">assign_stk :: Int -&gt; [(a, ParamLocation)] -&gt; [a] -&gt; (Int, [(a, ParamLocation)])
</span><a href="#local-6989586621681049267"><span class="hs-identifier hs-var hs-var">assign_stk</span></a></span></span><span> </span><span id="local-6989586621681049265"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049265"><span class="hs-identifier hs-var">offset</span></a></span></span><span> </span><span id="local-6989586621681049264"><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049264"><span class="hs-identifier hs-var">assts</span></a></span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049265"><span class="hs-identifier hs-var">offset</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049264"><span class="hs-identifier hs-var">assts</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-121"></span><span>      </span><span class="annot"><a href="#local-6989586621681049267"><span class="hs-identifier hs-var">assign_stk</span></a></span><span> </span><span id="local-6989586621681049263"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049263"><span class="hs-identifier hs-var">offset</span></a></span></span><span> </span><span id="local-6989586621681049262"><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049262"><span class="hs-identifier hs-var">assts</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049261"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049261"><span class="hs-identifier hs-var">r</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621681049260"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049260"><span class="hs-identifier hs-var">rs</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-122"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; [(a, ParamLocation)] -&gt; [a] -&gt; (Int, [(a, ParamLocation)])
</span><a href="#local-6989586621681049267"><span class="hs-identifier hs-var">assign_stk</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049259"><span class="hs-identifier hs-var">off'</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049261"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#StackParam"><span class="hs-identifier hs-var">StackParam</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049259"><span class="hs-identifier hs-var">off'</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(a, ParamLocation) -&gt; [(a, ParamLocation)] -&gt; [(a, ParamLocation)]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[(a, ParamLocation)]
</span><a href="#local-6989586621681049262"><span class="hs-identifier hs-var">assts</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681049260"><span class="hs-identifier hs-var">rs</span></a></span><span>
</span><span id="line-123"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681049258"><span class="annot"><span class="annottext">w :: Width
</span><a href="#local-6989586621681049258"><span class="hs-identifier hs-var hs-var">w</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Width
</span><a href="GHC.Cmm.Type.html#typeWidth"><span class="hs-identifier hs-var">typeWidth</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a -&gt; CmmType
</span><a href="#local-6989586621681049269"><span class="hs-identifier hs-var">arg_ty</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681049261"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-124"></span><span>              </span><span id="local-6989586621681049259"><span class="annot"><span class="annottext">off' :: Int
</span><a href="#local-6989586621681049259"><span class="hs-identifier hs-var hs-var">off'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049263"><span class="hs-identifier hs-var">offset</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049254"><span class="hs-identifier hs-var">size</span></a></span><span>
</span><span id="line-125"></span><span>              </span><span class="hs-comment">-- Stack arguments always take a whole number of words, we never</span><span>
</span><span id="line-126"></span><span>              </span><span class="hs-comment">-- pack them unlike constructor fields.</span><span>
</span><span id="line-127"></span><span>              </span><span id="local-6989586621681049254"><span class="annot"><span class="annottext">size :: Int
</span><a href="#local-6989586621681049254"><span class="hs-identifier hs-var hs-var">size</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; Int
</span><a href="GHC.Runtime.Heap.Layout.html#roundUpToWords"><span class="hs-identifier hs-var">roundUpToWords</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049271"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Int
</span><a href="GHC.Cmm.Type.html#widthInBytes"><span class="hs-identifier hs-var">widthInBytes</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049258"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-128"></span><span>
</span><span id="line-129"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-130"></span><span class="hs-comment">-- Local information about the registers available</span><span>
</span><span id="line-131"></span><span>
</span><span id="line-132"></span><span class="hs-keyword">type</span><span> </span><span id="AvailRegs"><span class="annot"><a href="GHC.Cmm.CallConv.html#AvailRegs"><span class="hs-identifier hs-var">AvailRegs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#VGcPtr"><span class="hs-identifier hs-type">VGcPtr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>   </span><span class="hs-comment">-- available vanilla regs.</span><span>
</span><span id="line-133"></span><span>                 </span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>   </span><span class="hs-comment">-- floats</span><span>
</span><span id="line-134"></span><span>                 </span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>   </span><span class="hs-comment">-- doubles</span><span>
</span><span id="line-135"></span><span>                 </span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>   </span><span class="hs-comment">-- longs (int64 and word64)</span><span>
</span><span id="line-136"></span><span>                 </span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">]</span><span>         </span><span class="hs-comment">-- XMM (floats and doubles)</span><span>
</span><span id="line-137"></span><span>                 </span><span class="hs-special">)</span><span>
</span><span id="line-138"></span><span>
</span><span id="line-139"></span><span class="hs-comment">-- Vanilla registers can contain pointers, Ints, Chars.</span><span>
</span><span id="line-140"></span><span class="hs-comment">-- Floats and doubles have separate register supplies.</span><span>
</span><span id="line-141"></span><span class="hs-comment">--</span><span>
</span><span id="line-142"></span><span class="hs-comment">-- We take these register supplies from the *real* registers, i.e. those</span><span>
</span><span id="line-143"></span><span class="hs-comment">-- that are guaranteed to map to machine registers.</span><span>
</span><span id="line-144"></span><span>
</span><span id="line-145"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#getRegsWithoutNode"><span class="hs-identifier hs-type">getRegsWithoutNode</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#getRegsWithNode"><span class="hs-identifier hs-type">getRegsWithNode</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#AvailRegs"><span class="hs-identifier hs-type">AvailRegs</span></a></span><span>
</span><span id="line-146"></span><span id="getRegsWithoutNode"><span class="annot"><span class="annottext">getRegsWithoutNode :: DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#getRegsWithoutNode"><span class="hs-identifier hs-var hs-var">getRegsWithoutNode</span></a></span></span><span> </span><span id="local-6989586621681049251"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049251"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-147"></span><span>  </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="annottext">((VGcPtr -&gt; GlobalReg) -&gt; Bool)
-&gt; [VGcPtr -&gt; GlobalReg] -&gt; [VGcPtr -&gt; GlobalReg]
forall a. (a -&gt; Bool) -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.List.html#filter"><span class="hs-identifier hs-var">filter</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681049250"><span class="annot"><span class="annottext">VGcPtr -&gt; GlobalReg
</span><a href="#local-6989586621681049250"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">VGcPtr -&gt; GlobalReg
</span><a href="#local-6989586621681049250"><span class="hs-identifier hs-var">r</span></a></span><span> </span><span class="annot"><span class="annottext">VGcPtr
</span><a href="GHC.Cmm.Expr.html#VGcPtr"><span class="hs-identifier hs-var">VGcPtr</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg -&gt; GlobalReg -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">/=</span></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="GHC.Cmm.Expr.html#node"><span class="hs-identifier hs-var">node</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realVanillaRegs"><span class="hs-identifier hs-var">realVanillaRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049251"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-148"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realFloatRegs"><span class="hs-identifier hs-var">realFloatRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049251"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-149"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realDoubleRegs"><span class="hs-identifier hs-var">realDoubleRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049251"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-150"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realLongRegs"><span class="hs-identifier hs-var">realLongRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049251"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-151"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#realXmmRegNos"><span class="hs-identifier hs-var">realXmmRegNos</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049251"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-152"></span><span>
</span><span id="line-153"></span><span class="hs-comment">-- getRegsWithNode uses R1/node even if it isn't a register</span><span>
</span><span id="line-154"></span><span id="getRegsWithNode"><span class="annot"><span class="annottext">getRegsWithNode :: DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#getRegsWithNode"><span class="hs-identifier hs-var hs-var">getRegsWithNode</span></a></span></span><span> </span><span id="local-6989586621681049242"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049242"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-155"></span><span>  </span><span class="hs-special">(</span><span> </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">[VGcPtr -&gt; GlobalReg] -&gt; Bool
forall (t :: * -&gt; *) a. Foldable t =&gt; t a -&gt; Bool
</span><a href="../../base/src/Data.Foldable.html#null"><span class="hs-identifier hs-var">null</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realVanillaRegs"><span class="hs-identifier hs-var">realVanillaRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049242"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-156"></span><span>    </span><span class="hs-keyword">then</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int -&gt; VGcPtr -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#VanillaReg"><span class="hs-identifier hs-var">VanillaReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">]</span><span>
</span><span id="line-157"></span><span>    </span><span class="hs-keyword">else</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realVanillaRegs"><span class="hs-identifier hs-var">realVanillaRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049242"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-158"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realFloatRegs"><span class="hs-identifier hs-var">realFloatRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049242"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-159"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realDoubleRegs"><span class="hs-identifier hs-var">realDoubleRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049242"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-160"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realLongRegs"><span class="hs-identifier hs-var">realLongRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049242"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-161"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#realXmmRegNos"><span class="hs-identifier hs-var">realXmmRegNos</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049242"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-162"></span><span>
</span><span id="line-163"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#allFloatRegs"><span class="hs-identifier hs-type">allFloatRegs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#allDoubleRegs"><span class="hs-identifier hs-type">allDoubleRegs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#allLongRegs"><span class="hs-identifier hs-type">allLongRegs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-164"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#allVanillaRegs"><span class="hs-identifier hs-type">allVanillaRegs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#VGcPtr"><span class="hs-identifier hs-type">VGcPtr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-165"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#allXmmRegs"><span class="hs-identifier hs-type">allXmmRegs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">]</span><span>
</span><span id="line-166"></span><span>
</span><span id="line-167"></span><span id="allVanillaRegs"><span class="annot"><span class="annottext">allVanillaRegs :: DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allVanillaRegs"><span class="hs-identifier hs-var hs-var">allVanillaRegs</span></a></span></span><span> </span><span id="local-6989586621681049234"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049234"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; VGcPtr -&gt; GlobalReg) -&gt; [Int] -&gt; [VGcPtr -&gt; GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; VGcPtr -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#VanillaReg"><span class="hs-identifier hs-var">VanillaReg</span></a></span><span> </span><span class="annot"><span class="annottext">([Int] -&gt; [VGcPtr -&gt; GlobalReg]) -&gt; [Int] -&gt; [VGcPtr -&gt; GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Vanilla_REG"><span class="hs-identifier hs-var">mAX_Vanilla_REG</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049234"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-168"></span><span id="allFloatRegs"><span class="annot"><span class="annottext">allFloatRegs :: DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allFloatRegs"><span class="hs-identifier hs-var hs-var">allFloatRegs</span></a></span></span><span>   </span><span id="local-6989586621681049231"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049231"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; GlobalReg) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#FloatReg"><span class="hs-identifier hs-var">FloatReg</span></a></span><span>   </span><span class="annot"><span class="annottext">([Int] -&gt; [GlobalReg]) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Float_REG"><span class="hs-identifier hs-var">mAX_Float_REG</span></a></span><span>   </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049231"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-169"></span><span id="allDoubleRegs"><span class="annot"><span class="annottext">allDoubleRegs :: DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allDoubleRegs"><span class="hs-identifier hs-var hs-var">allDoubleRegs</span></a></span></span><span>  </span><span id="local-6989586621681049229"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049229"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; GlobalReg) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#DoubleReg"><span class="hs-identifier hs-var">DoubleReg</span></a></span><span>  </span><span class="annot"><span class="annottext">([Int] -&gt; [GlobalReg]) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Double_REG"><span class="hs-identifier hs-var">mAX_Double_REG</span></a></span><span>  </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049229"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-170"></span><span id="allLongRegs"><span class="annot"><span class="annottext">allLongRegs :: DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allLongRegs"><span class="hs-identifier hs-var hs-var">allLongRegs</span></a></span></span><span>    </span><span id="local-6989586621681049227"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049227"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; GlobalReg) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#LongReg"><span class="hs-identifier hs-var">LongReg</span></a></span><span>    </span><span class="annot"><span class="annottext">([Int] -&gt; [GlobalReg]) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Long_REG"><span class="hs-identifier hs-var">mAX_Long_REG</span></a></span><span>    </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049227"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-171"></span><span id="allXmmRegs"><span class="annot"><span class="annottext">allXmmRegs :: DynFlags -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#allXmmRegs"><span class="hs-identifier hs-var hs-var">allXmmRegs</span></a></span></span><span>     </span><span id="local-6989586621681049224"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049224"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>                  </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_XMM_REG"><span class="hs-identifier hs-var">mAX_XMM_REG</span></a></span><span>     </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049224"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-172"></span><span>
</span><span id="line-173"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#realFloatRegs"><span class="hs-identifier hs-type">realFloatRegs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#realDoubleRegs"><span class="hs-identifier hs-type">realDoubleRegs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#realLongRegs"><span class="hs-identifier hs-type">realLongRegs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-174"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#realVanillaRegs"><span class="hs-identifier hs-type">realVanillaRegs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#VGcPtr"><span class="hs-identifier hs-type">VGcPtr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-175"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#realXmmRegNos"><span class="hs-identifier hs-type">realXmmRegNos</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">]</span><span>
</span><span id="line-176"></span><span>
</span><span id="line-177"></span><span id="realVanillaRegs"><span class="annot"><span class="annottext">realVanillaRegs :: DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realVanillaRegs"><span class="hs-identifier hs-var hs-var">realVanillaRegs</span></a></span></span><span> </span><span id="local-6989586621681049222"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049222"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; VGcPtr -&gt; GlobalReg) -&gt; [Int] -&gt; [VGcPtr -&gt; GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; VGcPtr -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#VanillaReg"><span class="hs-identifier hs-var">VanillaReg</span></a></span><span> </span><span class="annot"><span class="annottext">([Int] -&gt; [VGcPtr -&gt; GlobalReg]) -&gt; [Int] -&gt; [VGcPtr -&gt; GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Real_Vanilla_REG"><span class="hs-identifier hs-var">mAX_Real_Vanilla_REG</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049222"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-178"></span><span id="realFloatRegs"><span class="annot"><span class="annottext">realFloatRegs :: DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realFloatRegs"><span class="hs-identifier hs-var hs-var">realFloatRegs</span></a></span></span><span>   </span><span id="local-6989586621681049220"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049220"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; GlobalReg) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#FloatReg"><span class="hs-identifier hs-var">FloatReg</span></a></span><span>   </span><span class="annot"><span class="annottext">([Int] -&gt; [GlobalReg]) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Real_Float_REG"><span class="hs-identifier hs-var">mAX_Real_Float_REG</span></a></span><span>   </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049220"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-179"></span><span id="realDoubleRegs"><span class="annot"><span class="annottext">realDoubleRegs :: DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realDoubleRegs"><span class="hs-identifier hs-var hs-var">realDoubleRegs</span></a></span></span><span>  </span><span id="local-6989586621681049218"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049218"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; GlobalReg) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#DoubleReg"><span class="hs-identifier hs-var">DoubleReg</span></a></span><span>  </span><span class="annot"><span class="annottext">([Int] -&gt; [GlobalReg]) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Real_Double_REG"><span class="hs-identifier hs-var">mAX_Real_Double_REG</span></a></span><span>  </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049218"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-180"></span><span id="realLongRegs"><span class="annot"><span class="annottext">realLongRegs :: DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realLongRegs"><span class="hs-identifier hs-var hs-var">realLongRegs</span></a></span></span><span>    </span><span id="local-6989586621681049216"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049216"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int -&gt; GlobalReg) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#LongReg"><span class="hs-identifier hs-var">LongReg</span></a></span><span>    </span><span class="annot"><span class="annottext">([Int] -&gt; [GlobalReg]) -&gt; [Int] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Real_Long_REG"><span class="hs-identifier hs-var">mAX_Real_Long_REG</span></a></span><span>    </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049216"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-181"></span><span>
</span><span id="line-182"></span><span id="realXmmRegNos"><span class="annot"><span class="annottext">realXmmRegNos :: DynFlags -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#realXmmRegNos"><span class="hs-identifier hs-var hs-var">realXmmRegNos</span></a></span></span><span> </span><span id="local-6989586621681049214"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049214"><span class="hs-identifier hs-var">dflags</span></a></span></span><span>
</span><span id="line-183"></span><span>    </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; Bool
</span><a href="GHC.Driver.Session.html#isSse2Enabled"><span class="hs-identifier hs-var">isSse2Enabled</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049214"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var">regList</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int
</span><a href="GHC.Driver.Session.html#mAX_Real_XMM_REG"><span class="hs-identifier hs-var">mAX_Real_XMM_REG</span></a></span><span>     </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049214"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-184"></span><span>    </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-185"></span><span>
</span><span id="line-186"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-type">regList</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">]</span><span>
</span><span id="line-187"></span><span id="regList"><span class="annot"><span class="annottext">regList :: Int -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#regList"><span class="hs-identifier hs-var hs-var">regList</span></a></span></span><span> </span><span id="local-6989586621681049211"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049211"><span class="hs-identifier hs-var">n</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span> </span><span class="hs-glyph">..</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681049211"><span class="hs-identifier hs-var">n</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-188"></span><span>
</span><span id="line-189"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#allRegs"><span class="hs-identifier hs-type">allRegs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#AvailRegs"><span class="hs-identifier hs-type">AvailRegs</span></a></span><span>
</span><span id="line-190"></span><span id="allRegs"><span class="annot"><span class="annottext">allRegs :: DynFlags -&gt; AvailRegs
</span><a href="GHC.Cmm.CallConv.html#allRegs"><span class="hs-identifier hs-var hs-var">allRegs</span></a></span></span><span> </span><span id="local-6989586621681049210"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049210"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allVanillaRegs"><span class="hs-identifier hs-var">allVanillaRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049210"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-191"></span><span>                  </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allFloatRegs"><span class="hs-identifier hs-var">allFloatRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049210"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-192"></span><span>                  </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allDoubleRegs"><span class="hs-identifier hs-var">allDoubleRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049210"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-193"></span><span>                  </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#allLongRegs"><span class="hs-identifier hs-var">allLongRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049210"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-194"></span><span>                  </span><span class="annot"><span class="annottext">DynFlags -&gt; [Int]
</span><a href="GHC.Cmm.CallConv.html#allXmmRegs"><span class="hs-identifier hs-var">allXmmRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049210"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-195"></span><span>
</span><span id="line-196"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#nodeOnly"><span class="hs-identifier hs-type">nodeOnly</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#AvailRegs"><span class="hs-identifier hs-type">AvailRegs</span></a></span><span>
</span><span id="line-197"></span><span id="nodeOnly"><span class="annot"><span class="annottext">nodeOnly :: AvailRegs
</span><a href="GHC.Cmm.CallConv.html#nodeOnly"><span class="hs-identifier hs-var hs-var">nodeOnly</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int -&gt; VGcPtr -&gt; GlobalReg
</span><a href="GHC.Cmm.Expr.html#VanillaReg"><span class="hs-identifier hs-var">VanillaReg</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-198"></span><span>
</span><span id="line-199"></span><span class="hs-comment">-- This returns the set of global registers that *cover* the machine registers</span><span>
</span><span id="line-200"></span><span class="hs-comment">-- used for argument passing. On platforms where registers can overlap---right</span><span>
</span><span id="line-201"></span><span class="hs-comment">-- now just x86-64, where Float and Double registers overlap---passing this set</span><span>
</span><span id="line-202"></span><span class="hs-comment">-- of registers is guaranteed to preserve the contents of all live registers. We</span><span>
</span><span id="line-203"></span><span class="hs-comment">-- only use this functionality in hand-written C-- code in the RTS.</span><span>
</span><span id="line-204"></span><span class="annot"><a href="GHC.Cmm.CallConv.html#realArgRegsCover"><span class="hs-identifier hs-type">realArgRegsCover</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-205"></span><span id="realArgRegsCover"><span class="annot"><span class="annottext">realArgRegsCover :: DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realArgRegsCover"><span class="hs-identifier hs-var hs-var">realArgRegsCover</span></a></span></span><span> </span><span id="local-6989586621681049209"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span></span><span>
</span><span id="line-206"></span><span>    </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Bool
</span><a href="GHC.Cmm.CallConv.html#passFloatArgsInXmm"><span class="hs-identifier hs-var">passFloatArgsInXmm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Platform
</span><a href="GHC.Driver.Session.html#targetPlatform"><span class="hs-identifier hs-var hs-var">targetPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-207"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">((VGcPtr -&gt; GlobalReg) -&gt; GlobalReg)
-&gt; [VGcPtr -&gt; GlobalReg] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(VGcPtr -&gt; GlobalReg) -&gt; VGcPtr -&gt; GlobalReg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span class="annot"><span class="annottext">VGcPtr
</span><a href="GHC.Cmm.Expr.html#VGcPtr"><span class="hs-identifier hs-var">VGcPtr</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realVanillaRegs"><span class="hs-identifier hs-var">realVanillaRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[GlobalReg] -&gt; [GlobalReg] -&gt; [GlobalReg]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span>
</span><span id="line-208"></span><span>      </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realLongRegs"><span class="hs-identifier hs-var">realLongRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg] -&gt; [GlobalReg] -&gt; [GlobalReg]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span>
</span><span id="line-209"></span><span>      </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realDoubleRegs"><span class="hs-identifier hs-var">realDoubleRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="hs-comment">-- we only need to save the low Double part of XMM registers.</span><span>
</span><span id="line-210"></span><span>                            </span><span class="hs-comment">-- Moreover, the NCG can't load/store full XMM</span><span>
</span><span id="line-211"></span><span>                            </span><span class="hs-comment">-- registers for now...</span><span>
</span><span id="line-212"></span><span>
</span><span id="line-213"></span><span>    </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-214"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">((VGcPtr -&gt; GlobalReg) -&gt; GlobalReg)
-&gt; [VGcPtr -&gt; GlobalReg] -&gt; [GlobalReg]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(VGcPtr -&gt; GlobalReg) -&gt; VGcPtr -&gt; GlobalReg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span class="annot"><span class="annottext">VGcPtr
</span><a href="GHC.Cmm.Expr.html#VGcPtr"><span class="hs-identifier hs-var">VGcPtr</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; [VGcPtr -&gt; GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realVanillaRegs"><span class="hs-identifier hs-var">realVanillaRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[GlobalReg] -&gt; [GlobalReg] -&gt; [GlobalReg]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span>
</span><span id="line-215"></span><span>      </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realFloatRegs"><span class="hs-identifier hs-var">realFloatRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg] -&gt; [GlobalReg] -&gt; [GlobalReg]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span>
</span><span id="line-216"></span><span>      </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realDoubleRegs"><span class="hs-identifier hs-var">realDoubleRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg] -&gt; [GlobalReg] -&gt; [GlobalReg]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span>
</span><span id="line-217"></span><span>      </span><span class="annot"><span class="annottext">DynFlags -&gt; [GlobalReg]
</span><a href="GHC.Cmm.CallConv.html#realLongRegs"><span class="hs-identifier hs-var">realLongRegs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049209"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-218"></span><span>      </span><span class="hs-comment">-- we don't save XMM registers if they are not used for parameter passing</span><span>
</span><span id="line-219"></span></pre></body></html>